package com.biz.primus.ms.order.service;

import com.biz.primus.model.order.enums.OrderState;
import com.biz.primus.model.order.vo.request.OrderSummaryRequestVO;
import com.biz.primus.model.order.vo.request.PaidOrderRequestVO;
import com.biz.primus.model.order.vo.aftersale.QueryOrderResponseVO;
import com.biz.primus.model.order.vo.response.OrderResponseVO;
import com.biz.primus.model.order.vo.response.OrderSummaryResponseVO;

import java.util.List;

/**
 * 订单服务接口
 *
 * @author Tiger Feng
 * @date 2017年10月31日
 */
public interface OrderService {
    /**
     * 订单结算<br><p>
     * 1.配送地址：用户收货地址；<br>
     * 2.配送方式：同城配送、自提、三方物流；<br>
     * 3.商品促销活动：活动方式去人（商品A送商品B、满x减y）；<br>
     * 4.订单促销活动：<br>
     * 5.优惠券：调用第三方接口计算；<br>
     * 6.支付方式：线上统一（货到付款、微信支付、支付宝支付、电子钱包、银行卡）；<br>
     * 7.发票说明：记录发票信息；<br></p>
     *
     * @param requestVO 订单请求视图
     * @return 汇总后的订单数据
     */
    OrderSummaryResponseVO settleOrder(OrderSummaryRequestVO requestVO);

    /**
     *  创建订单<br>
     *      1、订单结算;
     *      2、创建订单，持久化到数据库；
     * @param requestVO
     * @return
     */
    OrderSummaryResponseVO createOrder(OrderSummaryRequestVO requestVO);

    /**
     * 获取订单信息
     * @param orderCode 订单编码
     * @return
     */
    OrderResponseVO getByOrderCode(String orderCode);

    /**
     *  根据订单编号和状态查询订单列表
     * @param orderCode
     * @param state
     * @return
     */
    List<OrderResponseVO> getByOrderCodeAndState(String orderCode, OrderState state);

    /**
     *  订单支付成功
     * @param paidOrderRequestVO 支付订单请求模型
     * @return
     */
    Boolean updateOrderSummary2Paid(PaidOrderRequestVO paidOrderRequestVO);

    /**
     * 取消订单
     * @param orderCode 需要取消订单的订单编码
     */
    void cancelOrder(String orderCode);

    /**
     * 确认收货
     * @param orderCode 订单编码
     * @return
     */
    Boolean confirmReceipt(String orderCode);
}
